This invention relates generally to microprocessing, and more particularly to providing methods to improve fixed-point arithmetic operations.
Fixed-point divide, also known as integer divide, instructions may be carried out by any of a number of algorithms. Some implementations of fixed-point divide are based on the SRT (Sweeney Robertson Tocher) divide algorithm, which is similar to the repeated subtraction method often done by hand called “long division”. Other implementations of integer divide include “iterative” algorithms, like the Newton-Raphson and Goldschmidt algorithms. These algorithms start with an estimate of the quotient and iterate on that estimate, improving the precision during each iteration, until the required quotient precision is achieved.
When designing the logic and circuits for complex instructions such as the algorithms described above, it is important to note that errors may occur during execution of the algorithm, either due to errors in the design (including the algorithm itself) or due to circuit malfunctions such as manufacturing faults or rare environmental disturbances. Functional checking of these types of fixed-point divide algorithms and their results using formal verification techniques is not currently available, and such checking would only serve to eliminate design flaws, as opposed to malfunctions occurring during execution.
Accordingly, other techniques have been devised to try and verify the correctness of the algorithm and/or the result. For example, previous machines have focused on verifying the divide instruction's internal verifiable mathematical operations using parity and residue checks. While these techniques can verify the correctness of each internal operation, they do not speak to the correctness of the final result.
Thus, it would be desirable to be able to detect errors based on the final result of a fixed-point divide algorithm. Such an ability would be useful in providing a method to verify the actual results of a divide operation without the complexity and uncertainty of verifying each mathematical step in the algorithm.